#ifndef UC_BRLVTRAV_H
#define UC_BRLVTRAV_H 1

#include "zadesk.h"
#include "zrxobject.h"
#include "zrxboiler.h"
#include "ucbrgbl.h"
#include "ucbrtrav.h"


// forward class declarations
class UcGePoint2d;
class UcBrLoop;
class UcBrVertex;
class UcBrFaceLoopTraverser;
class UcBrVertexLoopTraverser;


class DllImpExp UcBrLoopVertexTraverser : public UcBrTraverser
{
public:
    UCRX_DECLARE_MEMBERS(UcBrLoopVertexTraverser);
    UcBrLoopVertexTraverser();
    UcBrLoopVertexTraverser(const UcBrLoopVertexTraverser& src);
    ~UcBrLoopVertexTraverser();

    // Assignment operator
    UcBrLoopVertexTraverser& operator = (const UcBrLoopVertexTraverser& src);

    // Queries & Initialisers
    UcBr::ErrorStatus   setLoop         (UcBrFaceLoopTraverser& faceLoop);
    UcBr::ErrorStatus   getLoop         (UcBrLoop& loop) const;
    UcBr::ErrorStatus   getVertex       (UcBrVertex& vertex) const;

    // Downward links
    // Vertex usage by loop (n::1)
    UcBr::ErrorStatus   getParamPoint	(UcGePoint2d*& ppoint) const;
    UcBr::ErrorStatus   getParamPoint	(UcGePoint2d& ppoint) const;

    // Queries & Initialisers
	UcBr::ErrorStatus	setLoopAndVertex(const UcBrVertexLoopTraverser& vertexLoop);
    UcBr::ErrorStatus   setLoop         (const UcBrFaceLoopTraverser& faceLoop);
	UcBr::ErrorStatus   setLoop         (const UcBrLoop& loop);
    UcBr::ErrorStatus   setVertex       (const UcBrVertex& vertex);
};


#endif
